package ar.uba.fi.algo3.tests;

import junit.framework.TestCase;

import org.junit.Test;

import ar.uba.fi.algo3.auxiliares.*;
import ar.uba.fi.algo3.modelo.CampoBatalla;
import ar.uba.fi.algo3.modelo.astillero.*;
import ar.uba.fi.algo3.modelo.nave.Nave;

public class CampoBatallaTest extends TestCase {
	
	@Test
	public void testTamanioDelCampoDeBatalla(){
		
		CampoBatalla campoBatalla= new CampoBatalla();
		
		assertTrue(campoBatalla.getAlto()==9);
		assertTrue(campoBatalla.getAncho()==9);
    } 
	
	@Test
	public void testPosicionEstaFueraDelTablero(){
		
		CampoBatalla campoBatalla= new CampoBatalla();
		Posicion unaPosicion= new Posicion (5,12);
		
		assertTrue(campoBatalla.fueraDelCampoBatalla(unaPosicion));
	}

	@Test
	public void testPosicionNoEstaFueraDelTablero(){
		
		CampoBatalla campoBatalla= new CampoBatalla();
		Posicion unaPosicion= new Posicion (5,5);
		
		assertFalse(campoBatalla.fueraDelCampoBatalla(unaPosicion));
	}	
	
	@Test 
	public void testNavesEnCampo (){
		
		CampoBatalla campoBatalla= new CampoBatalla();
		Astillero fabricarLancha= new AstilleroDeLanchas();
		Astillero fabricarDestructor= new AstilleroDeDestructores();
		Astillero fabricarBuque= new AstilleroDeBuques();
		Astillero fabricarPortaAvion= new AstilleroDePortaAviones();
		Astillero fabricarRompeHielos= new AstilleroDeRompeHielos();
		
		Nave unaLancha= fabricarLancha.crearNaveEn(new Posicion (2,1), campoBatalla, new DireccionDerecha());
		Nave unDestructor= fabricarDestructor.crearNaveEn(new Posicion (2,5), campoBatalla, new DireccionSuperior());
		Nave unBuque= fabricarBuque.crearNaveEn(new Posicion(6,2),campoBatalla, new DireccionIzquierda());
		Nave unPortaAvion= fabricarPortaAvion.crearNaveEn(new Posicion(0,0), campoBatalla, new DireccionInferior());
		Nave unRompeHielos= fabricarRompeHielos.crearNaveEn(new Posicion(7,9), campoBatalla, new DireccionIzquierdaSuperior());
		
		campoBatalla.insertarAlCampo(unaLancha);
		campoBatalla.insertarAlCampo(unDestructor);
		campoBatalla.insertarAlCampo(unBuque);
		campoBatalla.insertarAlCampo(unPortaAvion);
		campoBatalla.insertarAlCampo(unRompeHielos);
		
		assertEquals (unaLancha.obtenerComponentes().get(0).getPosicion().getX(),2);
		assertEquals (unaLancha.obtenerComponentes().get(1).getPosicion().getX(),3);
		assertEquals (unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		assertEquals (unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		assertEquals (unDestructor.obtenerComponentes().get(0).getPosicion().getX(),2);
		assertEquals (unDestructor.obtenerComponentes().get(1).getPosicion().getX(),3);
		assertEquals (unDestructor.obtenerComponentes().get(2).getPosicion().getX(),4);
		assertEquals (unDestructor.obtenerComponentes().get(0).getPosicion().getY(),5);
		assertEquals (unDestructor.obtenerComponentes().get(1).getPosicion().getY(),5);
		assertEquals (unDestructor.obtenerComponentes().get(2).getPosicion().getY(),5);
	
		assertEquals (unBuque.obtenerComponentes().get(0).getPosicion().getX(),6);
		assertEquals (unBuque.obtenerComponentes().get(1).getPosicion().getX(),7);
		assertEquals (unBuque.obtenerComponentes().get(2).getPosicion().getX(),8);
		assertEquals (unBuque.obtenerComponentes().get(3).getPosicion().getX(),9);
		assertEquals (unBuque.obtenerComponentes().get(0).getPosicion().getY(),2);
		assertEquals (unBuque.obtenerComponentes().get(1).getPosicion().getY(),2);
		assertEquals (unBuque.obtenerComponentes().get(2).getPosicion().getY(),2);
		assertEquals (unBuque.obtenerComponentes().get(3).getPosicion().getY(),2);
		
		assertEquals (unPortaAvion.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals (unPortaAvion.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals (unPortaAvion.obtenerComponentes().get(2).getPosicion().getX(),2);
		assertEquals (unPortaAvion.obtenerComponentes().get(3).getPosicion().getX(),3);
		assertEquals (unPortaAvion.obtenerComponentes().get(4).getPosicion().getX(),4);
		assertEquals (unPortaAvion.obtenerComponentes().get(0).getPosicion().getY(),0);
		assertEquals (unPortaAvion.obtenerComponentes().get(1).getPosicion().getY(),0);
		assertEquals (unPortaAvion.obtenerComponentes().get(2).getPosicion().getY(),0);
		assertEquals (unPortaAvion.obtenerComponentes().get(3).getPosicion().getY(),0);
		assertEquals (unPortaAvion.obtenerComponentes().get(4).getPosicion().getY(),0);
		
		assertEquals (unRompeHielos.obtenerComponentes().get(0).getPosicion().getX(),7);
		assertEquals (unRompeHielos.obtenerComponentes().get(1).getPosicion().getX(),8);
		assertEquals (unRompeHielos.obtenerComponentes().get(2).getPosicion().getX(),9);
		assertEquals (unRompeHielos.obtenerComponentes().get(0).getPosicion().getY(),9);
		assertEquals (unRompeHielos.obtenerComponentes().get(1).getPosicion().getY(),9);
		assertEquals (unRompeHielos.obtenerComponentes().get(2).getPosicion().getY(),9);
		
		//Por ahora solo se mueven, en un futuro dependiendo de los disparos, van a ir destruyendose
		campoBatalla.pasoUnTurno();
		
		assertEquals (unaLancha.obtenerComponentes().get(0).getPosicion().getX(),3);
		assertEquals (unaLancha.obtenerComponentes().get(1).getPosicion().getX(),4);
		assertEquals (unaLancha.obtenerComponentes().get(0).getPosicion().getY(),1);
		assertEquals (unaLancha.obtenerComponentes().get(1).getPosicion().getY(),1);
		
		assertEquals (unDestructor.obtenerComponentes().get(0).getPosicion().getX(),2);
		assertEquals (unDestructor.obtenerComponentes().get(1).getPosicion().getX(),3);
		assertEquals (unDestructor.obtenerComponentes().get(2).getPosicion().getX(),4);
		assertEquals (unDestructor.obtenerComponentes().get(0).getPosicion().getY(),4);
		assertEquals (unDestructor.obtenerComponentes().get(1).getPosicion().getY(),4);
		assertEquals (unDestructor.obtenerComponentes().get(2).getPosicion().getY(),4);
	
		assertEquals (unBuque.obtenerComponentes().get(0).getPosicion().getX(),5);
		assertEquals (unBuque.obtenerComponentes().get(1).getPosicion().getX(),6);
		assertEquals (unBuque.obtenerComponentes().get(2).getPosicion().getX(),7);
		assertEquals (unBuque.obtenerComponentes().get(3).getPosicion().getX(),8);
		assertEquals (unBuque.obtenerComponentes().get(0).getPosicion().getY(),2);
		assertEquals (unBuque.obtenerComponentes().get(1).getPosicion().getY(),2);
		assertEquals (unBuque.obtenerComponentes().get(2).getPosicion().getY(),2);
		assertEquals (unBuque.obtenerComponentes().get(3).getPosicion().getY(),2);
		
		assertEquals (unPortaAvion.obtenerComponentes().get(0).getPosicion().getX(),0);
		assertEquals (unPortaAvion.obtenerComponentes().get(1).getPosicion().getX(),1);
		assertEquals (unPortaAvion.obtenerComponentes().get(2).getPosicion().getX(),2);
		assertEquals (unPortaAvion.obtenerComponentes().get(3).getPosicion().getX(),3);
		assertEquals (unPortaAvion.obtenerComponentes().get(4).getPosicion().getX(),4);
		assertEquals (unPortaAvion.obtenerComponentes().get(0).getPosicion().getY(),1);
		assertEquals (unPortaAvion.obtenerComponentes().get(1).getPosicion().getY(),1);
		assertEquals (unPortaAvion.obtenerComponentes().get(2).getPosicion().getY(),1);
		assertEquals (unPortaAvion.obtenerComponentes().get(3).getPosicion().getY(),1);
		assertEquals (unPortaAvion.obtenerComponentes().get(4).getPosicion().getY(),1);
		
		assertEquals (unRompeHielos.obtenerComponentes().get(0).getPosicion().getX(),6);
		assertEquals (unRompeHielos.obtenerComponentes().get(1).getPosicion().getX(),7);
		assertEquals (unRompeHielos.obtenerComponentes().get(2).getPosicion().getX(),8);
		assertEquals (unRompeHielos.obtenerComponentes().get(0).getPosicion().getY(),8);
		assertEquals (unRompeHielos.obtenerComponentes().get(1).getPosicion().getY(),8);
		assertEquals (unRompeHielos.obtenerComponentes().get(2).getPosicion().getY(),8);		
	}
}

